package edu.utn.tacs.grupouno.rest.api;

import java.text.DateFormat;
import java.util.List;

import javax.jws.WebService;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import edu.utn.tacs.grupouno.negocio.Analisis;
import edu.utn.tacs.grupouno.negocio.EstadoTurno;
import edu.utn.tacs.grupouno.negocio.Turno;
import edu.utn.tacs.grupouno.negocio.TurnoSemanal;

@WebService
public interface TurnoService {

	/**
	 * Obtener un turno especifico
	 * @param date dia en formato dd-MM-yyyy
	 * @param time hora en formato HH:mm
	 * @return
	 */
	@GET
	@Path("/{date}/{time}")
	@Produces("application/xml")
	public Turno getTurno(@PathParam("date") String date, @PathParam("time") String time);
	/**
	 * Obtener una lista de turnos en un dia
	 * @param date dia en formato dd-MM-yyyy
	 * @return
	 */
	@GET
	@Path("/{date}")
	@Produces("application/xml")
	public List<Turno> getTurnos(@PathParam("date") String dateString);
	/**
	 * Crea un turno en un dia, el horario que esta definido dentro del turnoSemanal debe ser el mismo
	 * @param date dia en formato dd-MM-yyyy
	 * @param time hora en formato HH:mm
	 * @return
	 */
	@PUT
	@Path("/{date}/{time}")
	@Consumes("application/xml")
	public void setTurno(@PathParam("date") String date, @PathParam("time") String time, Turno turno);
	/**
	 * Crea un turno en un dia, el horario esta definido dentro del turno
	 * @param date dia en formato dd-MM-yyyy
	 * @return
	 */
	@POST
	@Path("/{date}")
	@Consumes("application/xml")
	public void setTurno(@PathParam("date") String date, Turno turno);
	/**
	 * Elimina un turno especifico
	 * @param date dia en formato dd-MM-yyyy
	 * @param time hora en formato HH:mm
	 * @return
	 */
	@DELETE
	@Path("/{date}/{time}")
	@Produces("application/xml")
	public void removeTurno(@PathParam("date") String date, @PathParam("time") String time);
	/**
	 * Asignar un Analisis a un turno. El turno debe existir y estar disponible sino no se podra efectuar<br>
	 * la operacion<br>
	 * Del Analisis solo importa que este bien cargado el Id, este debe estar guardado en el otro servicio<br>
	 * @param date dia en formato dd-MM-yyyy
	 * @param time hora en format HH:mm
	 * @param analisisId  en id del analisis
	 */
	@POST
	@Path("/{date}/{time}/analisis")
	@Consumes("application/xml")
	public void asignarAnalisis(@PathParam("date") String date, @PathParam("time") String time, Analisis analisis);
	/**
	 * Settea un estado al turno
	 * @param date dia en formato dd-MM-yyyy
	 * @param time hora en format HH:mm
	 * @param estado el nuevo estado
	 */
	@POST
	@Path("/{date}/{time}")
	@Consumes("application/xml")
	public void asistioPaciente(@PathParam("date") String date, @PathParam("time") String time, EstadoTurno estado);
	
	@POST
	@Path("/turnosSemanales")
	@Consumes("application/xml")
	public void addTurnoSemanal(TurnoSemanal turnoSemanal);
	
	@GET
	@Path("/format")
	@Produces("application/xml")
	public DateFormat getDateFormat();
}